<?php namespace Home\Controller;
use Hdphp\Controller\Controller;
use Common\Model\Category;
use Common\Model\Goods;
use Common\Model\GoodsAtt;
use Common\Model\TypeAtt;
class ListController extends Controller{
	public function index(){
		$cid=Q('get.cid',0,'intval');
		$cateModel=new Category;
//		获得第二级分类
		$cateSon=$cateModel->where("cid={$cid}")->find();
//		获得顶级分类
		$cateGrandpa=$cateModel->where("cid={$cateSon['pid']}")->find();
//		获得第三级分类
		$cateGrandson=$cateModel->where("pid={$cid}")->get();
		
//		筛选条件
//	1.获得顶级分类  已经获得
//	2.通过当前分类的cid获得当前分类的所有子集  使用递归查找
		$cids=$cateModel->getSon($cateModel->get(),$cid);
//		压入自己的cid;
		$cids[]=$cid;
		
//	3.通过$cids找到对应的商品 获得他们的gid
		$goodsModel=new Goods;
		$gids=$goodsModel->where("category_cid IN(".implode(',', $cids).")")->lists('gid');
//		如果这些分类下面有商品  才会执行的一系列动作
		if($gids){
//	4.	通过商品ID找到他们的商品属性
		$goodsAttrModel=new GoodsAtt;
		$goodsAttr=$goodsAttrModel->where("goods_gid IN(".implode(',', $gids).")")->groupBy('gvalue')->get();
//		把相同的类型属性的值放在一起
		$sameTemp=[];
		foreach($goodsAttr as $v){
			$sameTemp[$v['typeattribute_tid']][]=$v;
		}
//		p($sameTemp);
//		组合名字和值 获得类型属性名称 
		$typeAttrModel=new TypeAtt;
		$lastAttr=[];
		foreach($sameTemp as $typeattribute_tid => $v){
			$lastAttr[]=[
				'name'=>$typeAttrModel->where("taid={$typeattribute_tid}")->pluck('taname'),
				'value'=>$v,
				'taid'=>$typeattribute_tid
			];
		}
		View::with("lastAttr",$lastAttr);
//		筛选效果
//		地址栏效果
		$num=count($lastAttr);
		$param=isset($_GET['param']) ? explode('_', $_GET['param']):array_fill(0, $num, 0);
		View::with("param",$param);
		$finalGids = $this->filter($param,$gids);
		
	}else{
		View::with("lastAttr",[]);
	}
//		
		
//		获得商品数据
		
		$goodsData=$goodsModel->where("category_cid={$cid}")->get();
		
//		分配商品数据
		View::with('goodsData',$goodsData);
//		分配顶级分类
		View::with('cateGrandpa',$cateGrandpa);
//		分配第二级分类
		View::with('cateSon',$cateSon);
//		分配第三级分类
		View::with('cateGrandson',$cateGrandson);
		View::make();
	}

		public function filter($param,$cidGids){
			$goodsAtt=new GoodsAtt;
			$gidArr = [];
        foreach ($param as $gaid) {
            //如果点击的不是"不限"的时候
            //根据gtid得到商品的gid
            if($gaid){
                //查询到商品属性的名称
                $gvalue = $goodsAtt->where("gaid={$gaid}")->pluck('gvalue');
                //通过名称查询到gid
                $gidArr[] = $goodsAtt->where(['gvalue'=>$gvalue])->lists('goods_gid');
            }
        }
//		如果gidArr有值  说明用户筛选不是全部“全部”的时候
				if($gidArr){
					$gid=$gidArr[0];
					foreach($gidArr as $v){
						$gid=array_intersect($v, $gid);
					}
//					为了确保是当前分类，在取一次交集
					$finalGids=array_intersect($gid, $cidGids);
				}else{
					 $finalGids = $cidGids;
				}
					return $finalGids;
		
		
		
		}




}
